//
//  MiddleTabBar.m
//  mingkang
//
//  Created by Macx on 2016/11/18.
//  Copyright © 2016年 Macx. All rights reserved.
//

#import "MiddleTabBar.h"

#import "UIImage+Additions.h"

#define Magin 10

@interface MiddleTabBar()

// 按钮
@property (nonatomic, weak) UIButton *middleBtn;

@end

@implementation MiddleTabBar

- (instancetype)initWithFrame:(CGRect)frame {
    
    if (self = [super initWithFrame:frame]) {
        self.backgroundColor = [UIColor whiteColor];
        [self setShadowImage:[UIImage imageWithColor:[UIColor clearColor] size:CGSizeMake(50, 50)]];
        
        // 设置按钮不同状态时的图片
        UIButton *middleBtn = [UIButton buttonWithType:UIButtonTypeCustom];
        [middleBtn setBackgroundImage:IMAGE(@"tab_release") forState:UIControlStateNormal];
        [middleBtn setBackgroundImage:IMAGE(@"tab_release") forState:UIControlStateHighlighted];
        
        // 指定按钮
        self.middleBtn = middleBtn;
        
        // 给按钮添加事件
        [self.middleBtn addTarget:self action:@selector(middleBtnDidClick) forControlEvents:UIControlEventTouchUpInside];
        
        [self addSubview:middleBtn];
        
    }
    return self;
    
}

// 点击按钮实现事件
- (void)middleBtnDidClick {
    
    // 如果tabbar的代理实现了对应的代理方法，Name就调用代理的方法
    if ([self.delegate respondsToSelector:@selector(tabBarPlusBtnClick:)]) {
        // 实现代理方法
        [self.MyDelegate tabBarPlusBtnClick:self];
    }
    
}


- (void)layoutSubviews {
    
    [super layoutSubviews];
    
    //这里需要调用一个延展类的方法(文章下面说明内部实现)
    self.middleBtn.centerX = self.centerX;
    
    //调整发布按钮的中线点Y值
    self.middleBtn.centerY = self.height * 0.5 - 2 *Magin;
    self.middleBtn.centerY = self.height * 0.5;
    
    
    self.middleBtn.size = CGSizeMake(self.middleBtn.currentBackgroundImage.size.width, self.middleBtn.currentBackgroundImage.size.height);
    
    
    //文字
    //    UILabel *label = [[UILabel alloc] init];
    //    label.text = @"发布";
    //    label.font = [UIFont systemFontOfSize:11];
    //    [label sizeToFit];
    //    label.textColor = [UIColor grayColor];
    //    [self addSubview:label];
    //    label.centerX = self.middleBtn.centerX;
    //    label.centerY = CGRectGetMaxY(self.middleBtn.frame) + LBMagin ;
    
    
    //系统自带的按钮类型是UITabBarButton, 找出这些类型的按钮, 然后重新排布位置, 空出中间的位置
    Class class = NSClassFromString(@"UITabBarButton");
    
    int btnIndex = 0;
    for (UIView *btn in self.subviews) {//遍历tabBar的子控件
        
        //判断是系统自带的视图
        if ([btn isKindOfClass:class]) {
            
            //么就调整子控件位置，空出中间位置
            //每个按钮的宽度 == tabBar的五分之一
            btn.width = self.width / (self.itemNum+1);
            btn.x = btn.width * btnIndex;
            
            btnIndex++;
            
            //如果索引是2 (从0)开始) , 则直接让索引++(目的就是让消息按钮的位置向右移动，空出来发布按钮的位置)
            if (btnIndex == (self.itemNum/2)) {
                
                btnIndex++;
            }
            
            
        }
    }
    
    [self bringSubviewToFront:self.middleBtn];
    
    
}

//重写hitTest方法, 去监听发布按钮的点击, 目的是为了让凸出的部分也能响应点击事件
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event{
    
    //这是一个判断的关键, 不判断的话push到其他页面, 点击发布按钮的位置也是会有反应的, 这样就不好了
    //self.isHidden == NO 说明当前页面是有tabbar的，那么肯定是在导航控制器的根控制器页面
    //在导航控制器根控制器页面，那么我们就需要判断手指点击的位置是否在发布按钮身上
    //是的话让发布按钮自己处理点击事件，不是的话让系统去处理点击事件就可以了
    if (self.isHidden == NO) {
        
        //将当前tabbar的触摸点转换坐标系，转换到发布按钮的身上，生成一个新的点
        CGPoint newP = [self convertPoint:point toView:self.middleBtn];
        
        //判断如果这个新的点是在发布按钮身上，那么处理点击事件最合适的view就是发布按钮
        if ( [self.middleBtn pointInside:newP withEvent:event]) {
            return self.middleBtn;
        }else{//如果点不在发布按钮身上，直接让系统处理就可以了
            
            return [super hitTest:point withEvent:event];
        }
    }
    
    else {//tabbar隐藏了，那么说明已经push到其他的页面了，这个时候还是让系统去判断最合适的view处理就好了
        return [super hitTest:point withEvent:event];
    }
    
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect {
    // Drawing code
}
*/

@end
